package com.xuetang.mapper;

import com.xuetang.entity.CommunityLike;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 社区点赞Mapper接口
 */
@Mapper
public interface CommunityLikeMapper {

    /**
     * 添加点赞记录
     * 
     * @param like 点赞信息
     * @return 影响行数
     */
    int insert(CommunityLike like);

    /**
     * 删除点赞记录
     * 
     * @param id 点赞ID
     * @return 影响行数
     */
    int delete(@Param("id") Long id);

    /**
     * 根据类型、目标ID和用户ID删除点赞记录
     * 
     * @param type     类型：1-帖子，2-评论
     * @param targetId 目标ID
     * @param userId   用户ID
     * @return 影响行数
     */
    int deleteByTypeAndTargetAndUser(@Param("type") int type, @Param("targetId") Long targetId,
            @Param("userId") Long userId);

    /**
     * 检查用户是否点赞
     * 
     * @param type     类型：1-帖子，2-评论
     * @param targetId 目标ID
     * @param userId   用户ID
     * @return 点赞记录数
     */
    int checkUserLike(@Param("type") int type, @Param("targetId") Long targetId, @Param("userId") Long userId);

    /**
     * 根据类型和目标ID统计点赞数
     * 
     * @param type     类型：1-帖子，2-评论
     * @param targetId 目标ID
     * @return 点赞数
     */
    int countLikes(@Param("type") int type, @Param("targetId") Long targetId);

    /**
     * 根据类型和目标ID批量获取用户点赞状态
     * 
     * @param type      类型：1-帖子，2-评论
     * @param targetIds 目标ID列表
     * @param userId    用户ID
     * @return 点赞记录列表
     */
    List<CommunityLike> listUserLikes(@Param("type") int type, @Param("targetIds") List<Long> targetIds,
            @Param("userId") Long userId);
}